import { defineStore } from "pinia";

//定义数据并且对外暴露
// store就是定义共享状态的包装对象
// 内部包含四个属性： id 唯一标识 state 完整类型推理，推荐使用箭头函数 存放的数据 getters 类似属性计算，存储放对数据
// 操作的方法  actions 存储数据的复杂业务逻辑方法
// 理解： store类似Java中的实体类， id就是类名， state 就是装数据值的属性  getters就是get方法，actions就是对数据操作的其他方法
export const definedUser = defineStore({
  id: "userPinia", //必须唯一
  state: () => {
    // state中用于定义数据
    return {
      username: "张三",
      userId: 0,
      email: "example@qq.com",
      role: "user",
      registrationDate: "2023-04-01T10:00:00Z",
      token: localStorage.getItem("token") || null,
    };
  },
  getters: {
    // 用于定义一些通过数据计算而得到结果的一些方法 一般在此处不做对数据的修改操作
    // getters中的方法可以当做属性值方式使用
  },
  actions: {
    // 用于定义一些对数据修改的方法
    setToken(token) {
      this.token = token;
      localStorage.setItem("token", token);
    },
    removeToken() {
      this.token = null;
      localStorage.removeItem("token");
    },
    show(){
      console.log(this.username,
        this.userId,
        this.email,
        this.role,
        this.registrationDate)
    },
    // 新增一个 action 来设置用户信息
    setUserInformation(userInfo) {
      // 使用解构赋值来更新 store 中的 state 属性
      const {
        username,
        userId,
        email,
        role,
        register_date: registrationDate,
        // 注意：这里的 register_date 的 key 需要与 userInfo 对象中的 key 匹配
      } = userInfo;

      this.username = username;
      this.userId = userId;
      this.email = email;
      this.role = role;
      this.registrationDate = registrationDate; // 注意：这里使用了从 userInfo 中获取的 register_date 的值
    },
  },
});

export const definedSearch = defineStore({
  id: "SearchPinia", //必须唯一
  state: () => {
    // state中用于定义数据
    return {
      bookData:[],
    };
  },
  getters: {
    // 用于定义一些通过数据计算而得到结果的一些方法 一般在此处不做对数据的修改操作
    // getters中的方法可以当做属性值方式使用
  },
  actions: {
    // 用于定义一些对数据修改的方法
  },
});
